package com.aaa.service;

import org.springframework.transaction.annotation.Transactional;

import com.aaa.entity.Users;

/**
 * 用户服务接口，定义用户相关业务逻辑方法。
 *
 * @author 
 * @version 1.0
 * @since 2025-04-01
 */
@Transactional(rollbackFor = Exception.class)
public interface UserService {

    /**
     * 用户登录验证方法。
     * <p>
     * 该方法用于验证用户提供的手机号和密码是否匹配，
     * 并自动处理数据库中未加密的密码（若存在则加密后更新）。
     *
     * @param phone  用户登录手机号
     * @param password 用户输入的密码（明文）
     * @return 验证成功返回用户对象，失败返回 null
     * @throws IllegalArgumentException 如果手机号格式不符合要求
     */
    Users loginUser(String phone, String password);

    /**
     * 修改用户密码方法。
     * <p>
     * 该方法会自动对新密码进行 BCrypt 加密后更新到数据库。
     *
     * @param id 用户唯一标识（UUID）
     * @param password 新密码（明文）
     * @return 返回更新的行数，大于0表示更新成功
     * @throws IllegalArgumentException 如果用户 ID 无效
     */
    int updatePassword(String id, String password);
    
    /**
     * 根据用户ID获取用户信息。
     *
     * @param id 用户唯一标识（UUID）
     * @return 如果找到用户则返回用户对象，否则返回 null
     */
    Users getUserById(String id);

    /**
     * 判断手机号是否存在
     * @param phoneNumber
     * @return
     */
    public boolean isPhoneNumberExists(String phoneNumber);
}